package pe.edu.unmsm.fisi.sisconteg.repository.dao.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;

import pe.edu.unmsm.fisi.sisconteg.domain.model.Egresado;
import pe.edu.unmsm.fisi.sisconteg.repository.dao.EgresadoDAO;

@Repository
public class EgresadoDAOImpl implements EgresadoDAO {

	@Autowired
	private SessionFactory sessionFactory;

	@Override
	public void crear(Egresado egresado) throws DataAccessException {
		sessionFactory.getCurrentSession().save(egresado);
	}

	@Override
	public void actualizar(Egresado egresado) throws DataAccessException {
		sessionFactory.getCurrentSession().update(egresado);
	}

	@Override
	public void eliminarxId(Long idEgresado) throws DataAccessException {
		sessionFactory.getCurrentSession().delete(getEgresadoxId(idEgresado));
	}

	@Override
	public Egresado getEgresadoxId(Long idEgresado) throws DataAccessException {
		return (Egresado) sessionFactory.getCurrentSession().get(
				Egresado.class, idEgresado);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Egresado> listEgresados() throws DataAccessException {
		return sessionFactory.getCurrentSession()
				.createCriteria(Egresado.class).list();
	}

	@Override
	public Egresado getEgresadoxCodigoAlumno(String codAlumno)
			throws DataAccessException {
		String s = "select egre from Egresado egre where egre.alumno.codigoAlumno = :cod";
		return (Egresado) sessionFactory.getCurrentSession().createQuery(s)
				.setParameter("cod", codAlumno).uniqueResult();
	}

	@Override
	public Egresado getEgresadoxCorreo(String correo)
			throws DataAccessException {
		return (Egresado) sessionFactory.getCurrentSession()
				.createCriteria(Egresado.class)
				.add(Restrictions.eq("emailEgresado", correo)).uniqueResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Egresado> getEgresadosxSexo(String sexo)
			throws DataAccessException {
		return sessionFactory.getCurrentSession()
				.createCriteria(Egresado.class)
				.add(Restrictions.like("sexo", sexo)).list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Egresado> getEgresadosxTelefono(String telefono)
			throws DataAccessException {
		return sessionFactory.getCurrentSession()
				.createCriteria(Egresado.class)
				.add(Restrictions.like("telefono", telefono)).list();
	}

}
